package com.dozenx.util;

/**
 * 格式化输入工具类
 *
 * @author Created by dozen.zhang on 2017/8/28.
 * @date 2015-10-14
 * @Modified 2017-04-28
 *
 */

public class JSONUtil {




        /**
         * 打印输入到控制台
         *
         * @param jsonStr
         * @author lizhgb
         * @Date 2015-10-14 下午1:17:22
         */
        public static void printJson(String jsonStr) {
            System.out.println(formatJson(jsonStr));
        }

        /**
         * 格式化
         *
         * @param jsonStr
         * @return
         * @author lizhgb
         * @Date 2015-10-14 下午1:17:35
         * @Modified 2017-04-28 下午8:55:35
         */
        public static String formatJson(String jsonStr) {
            if (null == jsonStr || "".equals(jsonStr))
                return "";
            StringBuilder sb = new StringBuilder();
            char last = '\0';
            char current = '\0';
            int indent = 0;
            boolean isInQuotationMarks = false;
            for (int i = 0; i < jsonStr.length(); i++) {
                last = current;
                current = jsonStr.charAt(i);
                switch (current) {
                    case '"':
                        if (last != '\\'){
                            isInQuotationMarks = !isInQuotationMarks;
                        }
                        sb.append(current);
                        break;
                    case '{':
                    case '[':
                        sb.append(current);
                        if (!isInQuotationMarks) {
                            sb.append('\n');
                            indent++;
                            addIndentBlank(sb, indent);
                        }
                        break;
                    case '}':
                    case ']':
                        if (!isInQuotationMarks) {
                            sb.append('\n');
                            indent--;
                            addIndentBlank(sb, indent);
                        }
                        sb.append(current);
                        break;
                    case ',':
                        sb.append(current);
                        if (last != '\\' && !isInQuotationMarks) {
                            sb.append('\n');
                            addIndentBlank(sb, indent);
                        }
                        break;
                    default:
                        sb.append(current);
                }
            }

            return sb.toString();
        }

        /**
         * 添加space
         *
         * @param sb
         * @param indent
         * @author lizhgb
         * @Date 2015-10-14 上午10:38:04
         */
        private static void addIndentBlank(StringBuilder sb, int indent) {
            for (int i = 0; i < indent; i++) {
                sb.append('\t');
            }
        }


}
